package saves;

import game.Data;
import java.io.Serializable;

public class BlocoSimples implements Serializable {

    private static final long serialVersionUID = 8667606831251861391L;
    private int codBloco;

    @SuppressWarnings("unused")
    private BlocoSimples() {
    }

    public BlocoSimples(int codBloco) {
        this.codBloco = codBloco;
    }

    public int getCodigo() {
        return this.codBloco;
    }

    public static BlocoSimples getBloco(int codBloco) {
        if (Data.temBorda(codBloco) || Data.getBlocoInfo(codBloco).getFiacao() > 0) //Se tem bordas ou pode ter fios
            return new Complexo(codBloco);
        return new BlocoSimples(codBloco);
    }

    public static class Complexo extends BlocoSimples {

        private static final long serialVersionUID = 8478955231923150481L;
        private boolean eletrocutado;
        private boolean[] conexoes; //Saídas de fios para chões e paredes
        private int subCodigo; //Para blocos com bordas, como paredes; se 0, não calculado ou não existente
        private int angulo; //Para blocos com bordas que não sejam simétricas

        private Complexo() {}
        
        public Complexo(int codBloco) {
            super(codBloco);
            this.conexoes = new boolean[4];
            for (int i = 0; i < conexoes.length; i++)
                this.conexoes[i] = false;
        }

        public Complexo(int codBloco, boolean[] conexoes) {
            super(codBloco);
            this.conexoes = conexoes;
        }

        public void setConexoes(boolean[] conexoes) {
            this.conexoes = conexoes;
        }

        public void setConexao(int p, boolean c) {
            this.conexoes[p] = c;
        }

        public boolean[] getConexoes() {
            return conexoes;
        }

        public boolean isEletrocutado() {
            return eletrocutado;
        }

        public void setEletrocutado(boolean eletrocutado) {
            this.eletrocutado = eletrocutado;
        }

        public int getSubCodigo() {
            return subCodigo;
        }

        public int getAngulo() {
            return angulo;
        }
        
        public void setSubCodigo(int subCodigo, int angulo) {
            this.subCodigo = subCodigo;
            this.angulo = angulo;
        }
    }
}